// poj2369
// 题意：给定一个n(<=1000)个数的置换，问多少次置换为{1，2, 3, ..., n}。
//
// 题解：求出每个循环节长度求最小公倍数就行。
//
// run: $exec < input
#include <iostream>

int const maxn = 1007;
int a[maxn];
bool vis[maxn];
int n;

int loop_len(int x)
{
	vis[x] = true;
	int ret = 1;
	for (int i = a[x]; i != x; i = a[i]) {
		vis[i] = true;
		ret++;
	}
	return ret;
}

int gcd(int x, int y) { return !y ? x : gcd(y, x % y); }
int lcm(int x, int y) { return x * y / gcd(x, y); }

int main()
{
	std::ios::sync_with_stdio(false);
	std::cin >> n;
	for (int i = 1; i <= n; i++) std::cin >> a[i];
	int ans = 1;
	for (int i = 1; i <= n; i++) {
		if (!vis[i]) ans = lcm(ans, loop_len(i));
	}
	std::cout << ans << '\n';
}

